<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // - 索引方法：indexOf()、lastIndexOf()已经讲过
        // - 循环方法：forEach()、map()、filter()、every()、some()
        // - 归并方法：reduce()、reduceRight() 缩小方法

        // 数组.indexOf(查找的元素,index)//从指定索引开始查找元素，如果找不到，返回-1
        // lastIndexOf()与indexOf差不多，只不过从后往前找
        var arrs=["aa","bb","cc","aa"];
        console.log(arrs.indexOf("aa"));
        console.log(arrs.indexOf("aaaa"));
        console.log(arrs.indexOf("aa",2));//从索引为2的开始查找aa
        console.log(arrs.lastIndexOf("aa"));

        // forEach(callback)：循环遍历整个数组,没有返回值
        var res=arrs.forEach(function(value,index,array){//数组中的当前项的值，索引，数组本身
            console.log(value,index,array);
        
        });
        console.log(res);
        // map(callback)返回每次函数调用的结果组成的新数组
        var nums=[100,20,300];
        var arrs=nums.map(function(value,index,array){
           return value*3;
        });
        console.log(nums);
        console.log(arrs);


        // filter(callback)对数组元素进行过滤筛选，返回该方法为true的值所组成的新数组
        var nums=[100,20,300];
        var selectNum=nums.filter(function(value,index,array){
            return value>100;
        });
        console.log(selectNum);
        console.log("=======================");
        // every(callback)用于检测所有元素是否符合指定条件，只要有一个不符合，则返回false，如果都符合，则返回true
        var nums=[1001,200,300];
        var selectNum=nums.every(function(value,index,array){
            return value>100;
        });
        console.log(selectNum);
        // some(callback)用于检测所有元素是否符合指定条件，只要有一个符合，则返回true，如果都不符合，则返回false
        var nums=[10,20,30];
        var selectNum=nums.some(function(value,index,array){
            return value>100;
        });
        console.log(selectNum);

        // reduce(callback)、reduceRight(callback)会遍历数组中的所有项，然后构造一个最终的返回值，一个是从前往后,一个是从后往前
     
        
        var nums=[10,20,50,40];
        console.log(nums);
        
        var sum=nums.reduce(function(prev,cur,index,array){
            //prev 第一次循环数组中索引为0的元素，后续指的是上一次循环的返回值
            // cur当前循环到的元素值
            // index每次循环的当前值的索引
            // array当前的数组
            console.log("----------------");
            console.log(prev,cur,index);
            return prev+cur;
        });
        console.log(sum);

        var sum=nums.reduceRight(function(prev,cur,index,array){
            //prev 第一次循环数组中索引为0的元素，后续指的是上一次循环的返回值
            // cur当前循环到的元素值
            // index每次循环的当前值的索引
            // array当前的数组
            console.log("----------------");
            console.log(prev,cur,index);
            return prev+cur;
        });
        console.log(sum);
        

    </script>
</head>
<body>
    
</body>
</html>